package com.qf.listener;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Random;

//@Component
public class Consumer2 {

    /**
     * springboot内部会监控消费者是否出现异常。如果出现出异常， 会自动重试，消息是不会被删除的
     * @param message
     * @throws UnsupportedEncodingException
     */
    @RabbitListener(queues = "spTopicQue2")
    public void consumer1(Message message, Channel channel) throws IOException, InterruptedException {
        byte[] body = message.getBody();
        String msg = new String(body, "utf-8");
        System.out.println("spTopicQue2: " + msg);

        boolean flag = false; //表示业务的处理结果
        if (flag){
            //业务处理成功，确认 -- 消息就会被删除
            /*
                long deliveryTag:消息发布的一个标识
                boolean multiple:是否批量确认。（是否将之前未确认的消息一并确认）
             */
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
        }else{
            //业务处理失败，不确认
            /*
                long deliveryTag
                boolean multiple
                boolean requeue:是否重入列。true，就会重新入列,重新消费，false，不会重新入列（消息会进入死信队列）
             */
            Thread.sleep(3000);
            channel.basicNack(message.getMessageProperties().getDeliveryTag(),true,false);
        }
    }
}
